class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        vector<int> ret(2);
        int tmp = 0;
        // 整体数据进行异或，然后存放起来
        for(int i = 0; i < nums.size(); i++)
            tmp ^= nums[i];

        // 判断第 0 比特位上的数字是否为 1
        int bt = 0;
        for(int i = 0; i < 32; i++)
        {
            if((tmp & 1) == 1)
            {
                bt = i;
                break;
            }
            tmp >>= 1;
        }

        // 将数据分组
        for(int i = 0; i < nums.size(); i++)
        {
            if(((nums[i] >> bt) & 1) == 1)
                ret[0] ^= nums[i];
            else
                ret[1] ^= nums[i];
        }
        
        return ret;
    }
};